
package Game;

import TDALista.InvalidPositionException;

/**
 * Clase controlador que extiende de Thread
 */

public class Controlador extends Thread {

        protected GUI partida;
        
        
        /**
         * Constructor de la clase Controlador
         * @param gui
         */
        
        
        public Controlador(GUI gui) {
                partida=gui;
        }


        /**
         * Metodo run del thread
         */
        
        public void run(){
                        
                //Creacion del panel
                
                        Robot r = partida.getJugador().getRobot();
                        partida.getContenedor().add(r.getRepresentacionG());

                        
                        for(Objeto o: partida.getJugador().getTablero().getObjetos())
                                {
                                        partida.getContenedor().add(o.getRG());
                                        o.setTablero(partida.getJugador().getTablero());
                                }
                        
                        for(Transitable p: partida.getJugador().getTablero().getPisosTrans())
                        {
                                if (!p.hayObjeto())
                                {
                                        partida.getContenedor().add(p.getRG());

                                }
                                
                        }
                        
                        for(Piso p: partida.getJugador().getTablero().getPisos())
                        {
                                
                                        p.getRG().setVisible(true);
                                        partida.getContenedor().add(p.getRG());
                        
                        }
                        
                        for (Coleccionable c:partida.getJugador().getTablero().getObjetosColeccionables()){
                                partida.getContenedor().add(c.getRG());
                                c.getRG().setVisible(true);

                        }
                        
                        for (Destruible d:partida.getJugador().getTablero().getDestruibles())
                        {
                                partida.getContenedor().add(d.getRG());
                                d.getRG().setVisible(true);
                                
                        }
                        
                        for (Premio d:partida.getJugador().getTablero().getPremios())
                        {
                                partida.getContenedor().add(d.getRG());
                                d.getRG().setVisible(true);
                                
                        }
                        
                        partida.getContenedor().repaint();
                        r.start();
                        try {
                                Thread.sleep(10);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();}
                }
        
       /**
       *Metodo para actualizar el panel.
       */
                public void actualizar(){
                        
                        
                        
                        Robot r = partida.getJugador().getRobot();
                        partida.actualizarValores();
                        partida.getContenedor().add(r.getRepresentacionG());
                        
                        if (r.getBrazo().activado()){
                                r.getBrazo().getRG().setVisible(true);

                                partida.getContenedor().add(r.getBrazo().getRG());
                                
                        }else   r.getBrazo().getRG().setVisible(false);

                        r.getRepresentacionG().setVisible(true);
                        
                        for(Objeto o: partida.getJugador().getTablero().getObjetos())
                        {
                                o.getRG().setVisible(true);
                                partida.getContenedor().add(o.getRG());
                        }
                        
                        
                        for(Transitable p: partida.getJugador().getTablero().getPisosTrans())
                        {
                                if (!p.hayObjeto())
                                {
                                        partida.getContenedor().add(p.getRG());
                                }
                                
                        }
                        
                        for(Piso p: partida.getJugador().getTablero().getPisos())
                        {
                                
                                        partida.getContenedor().add(p.getRG());
                                        p.getRG().setVisible(true);
                                
                                
                        }
                        
                        for (Coleccionable c:partida.getJugador().getTablero().getObjetosColeccionables()){
                                partida.getContenedor().add(c.getRG());
                                c.getRG().setVisible(true);
                        }
                        
                        
                        for (Destruible d:partida.getJugador().getTablero().getDestruibles())
                        {
                                if (d.getRG().isVisible()==false)
                                        try {
                                                partida.getJugador().getTablero().getDestruibles().remove(d.getPosition());
                                        } catch (InvalidPositionException e) {
                                                // TODO Auto-generated catch block
                                                e.printStackTrace();
                                        }
                                else {
                                partida.getContenedor().add(d.getRG());
                                d.getRG().setVisible(true);
                                }
                                
                        }
                        
                        for (Premio p: partida.getJugador().getTablero().getPremios()){
                                partida.getContenedor().add(p.getRG());

                                p.getRG().setVisible(true);
                        }
                
                        partida.getContenedor().repaint();
                        
                        try {
                                Thread.sleep(25);
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();}
        
                }
                
         
                
}